Java Compiler API হল একটি বিশেষ API যা Java কোড কম্পাইল করতে ব্যবহৃত হয়। Java 6-এ Java Compiler API (javax.tools প্যাকেজে) পরিচিতি পায় এবং এটি Java কোড রানটাইমে কম্পাইল করার সুযোগ দেয়। Compiler ক্লাস হল এই API-এর একটি গুরুত্বপূর্ণ অংশ, যা Java সোর্স কোড কম্পাইল করার জন্য ব্যবহার করা হয়।
Compiler API Overview:
Java Compiler API ব্যবহার করার মাধ্যমে, আপনি কম্পাইলারকে প্রোগ্রামmatically অ্যাক্সেস করতে পারেন এবং Java সোর্স কোডকে Java bytecode বা .class ফাইলে রূপান্তরিত করতে পারেন। এটি একটি গুরুত্বপূর্ণ ফিচার, যেটি আপনাকে কোড রানটাইমে কম্পাইল এবং এক্সিকিউট করার ক্ষমতা দেয়।
Compiler ক্লাস:
Compiler ক্লাস javax.tools প্যাকেজে অন্তর্ভুক্ত। এটি JavaCompiler এর একটি ইন্টারফেস, যার মাধ্যমে আপনি Java সোর্স কোড কম্পাইল করতে পারবেন। এটি Tool ইন্টারফেসের একটি বাস্তবায়ন, যা কম্পাইলিংয়ের জন্য বিভিন্ন পরিষেবা সরবরাহ করে।
JavaCompiler ক্লাস Tool ইন্টারফেসের মাধ্যমে Java Programming Language এর সোর্স কোড কম্পাইল করতে ব্যবহৃত হয়।
Java Compiler API এর প্রধান ক্লাসসমূহ:
JavaCompiler:- এই ক্লাসটি Java সোর্স কোড কম্পাইল করতে ব্যবহৃত হয়। এটি
getTask()মেথড ব্যবহার করে একটি কম্পাইলিং টাস্ক তৈরি করে।
- এই ক্লাসটি Java সোর্স কোড কম্পাইল করতে ব্যবহৃত হয়। এটি
Diagnostic:- এটি কম্পাইলেশন সম্পর্কিত কোনো ত্রুটি বা সতর্কতার জন্য বিস্তারিত তথ্য প্রদান করে।
StandardJavaFileManager:- এটি একটি ফাইল ম্যানেজার যা সোর্স এবং ক্লাস ফাইলগুলির পরিচালনা করে।
Java Compiler API ব্যবহার করে Compiler ক্লাসের Integration:
JavaCompiler API ব্যবহার করার জন্য প্রথমে আপনাকে ToolProvider.getSystemJavaCompiler() মেথডের মাধ্যমে JavaCompiler অবজেক্ট তৈরি করতে হবে এবং তারপর getTask() মেথডের সাহায্যে কম্পাইলার টাস্ক চালাতে হবে।
প্রথমে JavaCompiler ক্লাসের সাথে কাজ করার উদাহরণ:
import javax.tools.*;
import java.io.*;
import java.util.*;
public class CompilerExample {
public static void main(String[] args) {
// Get the system compiler
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
// Get a file manager to manage input/output files
StandardJavaFileManager fileManager = compiler.getStandardFileManager(null, null, null);
// Provide the source file to be compiled
File sourceFile = new File("HelloWorld.java");
// Create a list of source files
Iterable<? extends JavaFileObject> compilationUnits = fileManager.getJavaFileObjects(sourceFile);
// Set up the options (e.g., destination for the compiled .class file)
List<String> options = Arrays.asList("-d", "outputDirectory");
// Create a diagnostic listener to handle compile-time errors
DiagnosticCollector<JavaFileObject> diagnostics = new DiagnosticCollector<>();
// Prepare the compilation task
JavaCompiler.CompilationTask task = compiler.getTask(
null, // No output stream, since we're using a diagnostic collector
fileManager,
diagnostics,
options,
null,
compilationUnits
);
// Perform the compilation
boolean success = task.call();
if (success) {
System.out.println("Compilation successful!");
} else {
System.out.println("Compilation failed.");
// Output any errors that occurred during compilation
for (Diagnostic<? extends JavaFileObject> diagnostic : diagnostics.getDiagnostics()) {
System.out.println(diagnostic.getMessage(null));
}
}
// Close the file manager
try {
fileManager.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
ব্যাখ্যা:
ToolProvider.getSystemJavaCompiler():- এই মেথডটি সিস্টেমের JavaCompiler ক্লাসের একটি ইনস্ট্যান্স রিটার্ন করে। এটি Java সোর্স কোড কম্পাইল করতে ব্যবহৃত হবে।
StandardJavaFileManager:- এটি একটি ফাইল ম্যানেজার যা ফাইলের ইনপুট এবং আউটপুট পরিচালনা করে। এই ফাইল ম্যানেজার দিয়ে সোর্স ফাইল এবং আউটপুট ডিরেক্টরি ম্যানেজ করা হয়।
JavaCompiler.CompilationTask:- এটি একটি কম্পাইল টাস্ক তৈরি করে এবং
call()মেথডের মাধ্যমে কম্পাইলেশন প্রক্রিয়া শুরু করা হয়। যদি কম্পাইলেশন সফল হয়, তাহলেtrueরিটার্ন করে, অন্যথায়falseরিটার্ন করে।
- এটি একটি কম্পাইল টাস্ক তৈরি করে এবং
- DiagnosticCollector:
- এটি কম্পাইলেশন সম্পর্কিত ত্রুটিগুলি (error) এবং সতর্কতা (warning) সংগ্রহ করে এবং আপনাকে সেই সম্পর্কে তথ্য প্রদান করে।
- Options:
- এই তালিকায় আপনি কম্পাইলেশন সম্পর্কিত বিভিন্ন অপশন দিতে পারেন, যেমন destination directory (
-d) যেখানে.classফাইল আউটপুট হবে।
- এই তালিকায় আপনি কম্পাইলেশন সম্পর্কিত বিভিন্ন অপশন দিতে পারেন, যেমন destination directory (
কম্পাইলেশন সম্পর্কিত ত্রুটি এবং সতর্কতা হ্যান্ডলিং:
কম্পাইলেশন প্রক্রিয়া চলাকালীন কোনো ত্রুটি বা সতর্কতা ঘটলে তা DiagnosticCollector অবজেক্টের মাধ্যমে ট্র্যাক করা হবে। আপনি diagnostics.getDiagnostics() ব্যবহার করে এই ত্রুটিগুলি পর্যালোচনা করতে পারেন এবং সেগুলি কনসোলে বা একটি লগ ফাইলে প্রদর্শন করতে পারেন।
Java Compiler API (JavaCompiler এবং Compiler ক্লাস) আপনাকে Java সোর্স কোড কম্পাইল করার ক্ষমতা প্রদান করে, যা runtime-এ কোড কম্পাইল এবং এক্সিকিউট করার একটি শক্তিশালী পদ্ধতি। ToolProvider.getSystemJavaCompiler() এবং JavaCompiler.CompilationTask এর মাধ্যমে আপনি সহজেই Java সোর্স কোড কম্পাইল করতে পারেন এবং এই প্রক্রিয়ার ত্রুটি বা সতর্কতা হ্যান্ডল করতে পারেন। Java Compiler API বিশেষ করে IDE-র বা build tools যেমন Maven এবং Gradle তৈরির ক্ষেত্রে ব্যবহার করা হয়।
Read more